package com.hup.winHolderService.ws.handler.parser;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

import java.nio.charset.StandardCharsets;

/**
 * [json字符串]消息处理器
 *
 * @author hugan
 * @date 2023/10/8
 */
public class WsDataParser {

    /**
     * @param msg 格式: [0]路径长度m, [1-(m+1)]api路径, [后面]入参数据
     * @param dataClz 支持java一般数据类型和对象class
     */
    public Object parse(byte[] msg, Class<?> dataClz) {
        int offset = 1 + msg[0];
        String str = new String(msg, offset, msg.length - offset, StandardCharsets.UTF_8);
        if ("".equals(str)) str = "{}";//避免业务方法要做非空判断
        return JSON.parseObject(str, dataClz);
    }

    /**
     * @param handlerMethod 前端处理消息的方法名,如'onKeyboardState'
     * @param data nullable
     */
    public static String toWsData(String handlerMethod, Object data) {
        JSONObject json = new JSONObject();
        json.put("handlerMethod", handlerMethod);
        json.put("data", JSON.toJSON(data));
        return json.toJSONString();
    }

}
